<?php
define('ROOT', dirname(__FILE__));
require_once ROOT . '/Libs/Sign.class.php';

// 加载配置
$config = include_once('Conf/config.php');

// API主机地址
define('API_HOST', $config['API_HOST']);

// api请求地址
$api_map = trim($_SERVER['PATH_INFO'], '/');

// API 请求地址
$api_url = API_HOST . $api_map;
// 请求方式：默认：post
$request_type = 'post';
// curl 参数
$curl_args = [];

// 秘钥
$auth_token = array_key_exists('AUTH_TOKEN', $config) && $config['AUTH_TOKEN'] ? $config['AUTH_TOKEN'] : '123456';

// cookie 文件
//$cookie_file = $_SERVER['DOCUMENT_ROOT'] . '/'.md5($auto_token).'.txt';		// 保存到根目录
$cookie_file = dirname(__FILE__) . '/Cookies/'.md5($auth_token).'.txt';		// 保存到网关目录
$curl_args['cookie_path'] 		= $cookie_file ? $cookie_file : null;
$curl_args['cookie_file'] 	= file_exists($cookie_file) ? $cookie_file : null;

// GET 请求地址
$get_map = ['admin/public/verify'];
$path_info = explode("/", $api_map);
$api_do = '';
if(!empty(array_filter($path_info))){
	foreach($path_info as $k=>$v){
		if($k > 2){
			break;
		}
		if($k > 0){
			$api_do .= '/';
		}
		$api_do .= $v;
	}
}
$request_type = in_array(strtolower($api_do), $get_map) ? 'get' : $request_type;

// 执行curl请求
curl_request($request_type, $api_url, $curl_args);

/**
 * curl 请求
 * @param String $type		请求方式：get、post
 * @param String $api_url	请求地址
 * @param Array $args		请求参数
 */
function curl_request($type='get', $api_url, $args=[]){
    global $config;
    switch(strtoupper($type)){
        // GET 请求
        case 'GET':
            $result = curl_get($api_url, $args['cookie_path'], $args['cookie_file']);
        break;
        // POST 请求
        case 'POST':
            // 请求数据
            $post_data = array_merge($_GET, $_POST);
            
            $signObj = Libs\Sign::instance( $config['AUTH_TOKEN'] );
            //获取签名数据
            $sign_data = $post_data ? $post_data : ['salt'=>$config['SALT']];
            $sign_str   = $signObj->getSignStr( $sign_data );
            //数据签名
            $post_data['sign'] = $signObj->makeSign( $sign_str );
            
            // 请求接口
            $result = curl_post($api_url, $post_data, $args['cookie_path'], $args['cookie_file']);
        break;
        default:
            $result = curl_get($api_url, $args['cookie_path'], $args['cookie_file']);
        break;
    }

    // 输出请求结果
    echo $result;
}

/**
 * curl GET请求
 * @param String $api_url		请求地址
 * @param String $cookie_path	cookie 保存路径
 * @param String $cookie_file	cookie 读取路径
 * @return String
 */
function curl_get($api_url, $cookie_path=null, $cookie_file=null){
	// 初始化curl
    $ch = curl_init(); 
    // 设置curl地址
    curl_setopt($ch, CURLOPT_URL, $api_url);
	// 保存响应数据到变量
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    // 设置cookie保存
	if(!is_null($cookie_path)) curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_path);
	// 设置cookie读取
	if(!is_null($cookie_file)) curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
    // 执行curl
    $output = curl_exec($ch); 
	// 关闭 curl
	curl_close($ch); 
    // 返回curl结果
    return $output;
}

/**
 * curl POST请求
 * @param String $url			请求地址
 * @param Array $data			提交数据
 * @param String $cookie_path	cookie 保存路径
 * @param String $cookie_file	cookie 读取路径
 * @return String
 */
function curl_post($url, $data, $cookie_path=null, $cookie_file=null){
	// 初始化curl
	$ch = curl_init();
	// 设置链接
	curl_setopt($ch, CURLOPT_URL, $url);
	// 响应结果存入变量
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	// 设置cookie保存
	if(!is_null($cookie_path)) curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_path);
	// 设置cookie读取
	if(!is_null($cookie_file)) curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
	// 设置请求方式
	curl_setopt($ch, CURLOPT_POST, 1);
	// 设置POST数据
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
	// 执行curl
	$output = curl_exec($ch);
	// 关闭curl
	curl_close($ch);
	// 返回curl结果
	return $output;
}